草庐IT

c++ - boost::asio::socket 线程安全

全部标签

sockets - 检索确切的连接 - tcp 套接字 - channel - goroutine

我正在学习Golang几天,所以我不清楚如何在函数内检索正确的连接“conn”函数处理消息对于相关消息“msg”谢谢!packagemainimport("fmt""log""net""os""encoding/json""time""bufio")typePacketstruct{PayloadPayload`json:"payload"`}typePayloadstruct{Datastring`json:"data"`}funcmain(){iflen(os.Args)!=2{fmt.Fprintf(os.Stderr,"Usage:%shostname\n",os.Args[0

multithreading - Golang 线程池调度程序的目的和顺序

我刚刚用go写完了一个简单的代理应用程序:代码从一个接口(interface)获取UDP数据包,加密数据,然后使用TCP将其发送到另一个接口(interface)。目前,我正在使用三个goroutines:一个用于接收数据,一个用于加密,一个用于发送数据。我刚刚开始尝试寻找提高代码效率和速度的方法。首先,我想为每个需要加密的数据包创建一个新的goroutine,但在阅读了以下两篇博文后,我明白这不是正确的做法:http://marcio.io/2015/07/handling-1-million-requests-per-minute-with-golang/http://nesv.g

http - 多线程Go for HTTP get

我在一个API中使用Go来获取我所在城市的公交车频率,但是当我尝试使HTTPGet访问许多URL时,我有点卡在了线程上。如果没有并发,程序需要超过16分钟才能完成1500个url调用以获取HTTP状态代码,我试图使用并发,但在阅读了很多帖子后我不明白goroutines是如何工作的......想法是制作一个函数并更改请求的数量,如下所示:gogetBusPostStatus(600,800)但我完全坚持...代码如下:packagemainimport("fmt""net/http""strconv""time")variint=0varconvStrstringvarmessage=

json - 在带有 json 文件数据存储的 Golang 应用程序中,直接从客户端接受 json 是不安全的/不好的做法吗?

我有一个简单的Golang应用程序,它带有一个控制应用程序的HTTPAPI,该API有一个由React.js应用程序提供支持的前端。前端允许用户更改设置并将名为settings的json对象直接发布到API/api/settings端点(内置简单的JWT身份验证)。我将该对象解码为应用程序要使用的结构,以防应用程序使用默认结构并向客户端发送错误。我的问题是;我这样做是正确的还是不安全的?将json直接发送到应用程序,无需任何服务器端验证,而是一个简单的json.unmarshal?PS:我来自PHP+MySQL网络应用程序背景,在这种情况下接受数据库的客户端输入而不转义是一件非常危险的

c - O_NONBLOCK SOCK_STREAM 限制为 8192

我正在从C程序写入SOCK_STREAM正在从go程序监听的Unix域套接字,使用net.Listen("unix",sockname).当我将套接字设置为O_NONBLOCK使用fcntl(),我看到C程序在第一次写入时只写入了8192字节。失败后,我监控并回写剩余数据,但我服务器上读取的数据在这种情况下是无效的。当我不使用O_NONBLOCK时,然后整个8762字节被写在一个单一的写入中,一切都按预期工作。C客户端套接字连接if((fd=socket(AF_UNIX,SOCK_STREAM,0))==-1){return;}intflags=fcntl(fd,F_GETFL,0);

c - 为什么我用cgo的时候报错 "undefined reference to ` add2”

目录如下:-包括测试.h-liblibmytest.so-源代码测试.gotest.go代码如下:packagemain/*#cgoCFLAGS:-I../include#cgoLDFLAGS:-L../lib-lmytest#include"Test.h"*/import"C"funcmain(){C.add2(10,10)}当我使用gobuildtest.go时,控制台报告:#command-line-arguments/tmp/go-build168903458/command-line-arguments/_obj/test.cgo2.o:在函数_cgo_9efddd4c1a4

golang 中的 C long double

我正在将算法从C移植到Go。我有点困惑。这是C函数:voidgauss_gen_cdf(uint64_tcdf[],longdoublesigma,intn){inti;longdoubles,d,e;//Calculations...for(i=1;i并在for循环中将值“s”分配给数组cdf中的元素“x”。这怎么可能?据我所知,longdouble是float64(在Go上下文中)。所以我不应该能够编译C代码,因为我正在将一个longdouble分配给一个只包含uint64元素的数组。但C代码运行良好。那么有人可以解释为什么这是有效的吗?非常感谢。更新:函数的原始C代码可以在这里找

Golang unix 套接字 : registering same type for RPC on different sockets?

我在Go中工作,对使用unix套接字有点陌生。尝试搜索类似的问题,但找不到任何内容,如果之前已经回答过,我们深表歉意。我想用unixsockets模拟一个机器集群进行测试。我正在测试我的Raft实现,所以我想在不同的unix套接字上注册相同类型的多个对象(一个庞大的结构)。但是看我写的一个简单的例子,效果似乎不是我想要的:为同一个导出方法拨不同的套接字似乎在单个端口上崩溃:packagemainimport("net""fmt""net/rpc""log""sync")typeServerstruct{namestring}typeSpeakArgsstruct{}typeSpeakR

c - 如何从 Go 函数返回 C 指针?

我有疑问是否可以从C上的Go函数指针返回?例如main.c可以是:structopen_db_returndb_ptr=open_db(db_path);GoSlicebacket={"DB",2,2};GoSlicekey={"CONFIG",6,6};structget_value_returnval=get_value(db_ptr.r0,backet,key);close_db(db_ptr.r0);接下来是Go代码://exportopen_dbfuncopen_db(pathstring)(interface{},error){db,err:=db.Open(path,06

不能用宏包装 cgo 标志

我编写了一个Go程序来模拟按键操作。为此,我必须使用cgo和不同的C代码片段,具体取决于正在编译Go代码的操作系统。我编写的代码如下所示:packagekeyboard/*#include#ifdef__WIN32#cgoCFLAGS:-nostdlib#includevoidSetKey(uint16_tkey,uint8_tvalue){INPUTip;ip.type=INPUT_KEYBOARD;ip.ki.wScan=0;ip.ki.time=0;ip.ki.dwExtraInfo=0;ip.ki.wVk=key;if(value){ip.ki.dwFlags=0;}else{